import { ref } from 'vue'
import { defineStore } from 'pinia'
import { loginAPI } from '@/apis/user'
import { useCartStore } from './cart'
import { mergeCartAPI, getCartListAPI } from '@/apis/cart'
// 储存用户信息
export const useUserStore = defineStore(
  'user',
  () => {
    // 调用购物车store
    const cartStore = useCartStore()
    // 定义用户管理的state
    const userInfo = ref({})
    // 定义获取数据的action函数
    // 在getUserInfo方法中添加购物车合并逻辑
    const getUserInfo = async ({ account, password }) => {
      const res = await loginAPI({ account, password })
      // 确保响应数据结构完整
      if (!res || typeof res !== 'object') {
        throw new Error('登录失败：服务器响应数据异常')
      }
      
      // 检查响应状态码
      if (res.code === 400 || res.code === 401) {
        // 如果是错误响应，直接抛出后端返回的错误信息
        console.log('登录响应数据:', res)
        throw new Error(res.message || '登录失败')
      }
      
      // 从响应中提取用户信息
      const { data } = res
      // 确保data和token存在
      if (!data || !data.token) {
        console.log('登录响应数据:', res)
        throw new Error('登录失败：认证信息不完整')
      }
      // 将后端返回的数据结构映射到前端需要的结构
      userInfo.value = {
        token: data.token,
        user_id: data.user_id,
        account: data.username,
        email: data.email,
        phoneNumber: data.phone_number
      }
      // 合并购物车操作
      if (cartStore.cartList.length > 0) {
        try {
          await mergeCartAPI(cartStore.cartList.map(item => ({
            skuId: item.skuId,
            selected: item.selected,
            count: item.count
          })))
          // 清空本地购物车
          cartStore.clearCart()
          // 获取最新的服务器购物车列表
          await cartStore.updateCartList()
        } catch (error) {
          console.error('购物车合并失败:', error)
          throw new Error('购物车合并失败，请稍后重试')
        }
      }
    }
    // 退出时清除用户信息
    const clearUserInfo = () => {
      userInfo.value = {}
      cartStore.clearCart()
    }
    return {
      getUserInfo,
      userInfo,
      clearUserInfo
    }
  },
  {
    persist: true
  }
)
